/* Copyright © 2017 Apple Inc. All rights reserved.
 *
 * Use of this source code is governed by a BSD-3-clause license that can
 * be found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause
 */
#define BOOST_TEST_MODULE
#include <boost/test/unit_test.hpp>
#include <core/util/test_macros.hpp>
#include <iostream>
#include <typeinfo>       // operator typeid
#include <cstddef>
#include <functional>
#include <iterator>
#include <type_traits>
#include <iterator>


#include <core/generics/gl_string.hpp>
#include <core/util/testing_utils.hpp>

using namespace turi;

int sign(int x) {
  if (x == 0)
    return 0;
  if (x < 0)
    return -1;
  return 1;
}


struct test_string_compare  {

 public:
  
  void _test_string(const gl_string& s, const gl_string& str, int x) {
    TS_ASSERT_EQUALS(sign(s.compare(str)), sign(x));
  }

  void test_string_basic() {
    _test_string(gl_string(""), gl_string(""), 0);
    _test_string(gl_string(""), gl_string("abcde"), -5);
    _test_string(gl_string(""), gl_string("abcdefghij"), -10);
    _test_string(gl_string(""), gl_string("abcdefghijklmnopqrst"), -20);
    _test_string(gl_string("abcde"), gl_string(""), 5);
    _test_string(gl_string("abcde"), gl_string("abcde"), 0);
    _test_string(gl_string("abcde"), gl_string("abcdefghij"), -5);
    _test_string(gl_string("abcde"), gl_string("abcdefghijklmnopqrst"), -15);
    _test_string(gl_string("abcdefghij"), gl_string(""), 10);
    _test_string(gl_string("abcdefghij"), gl_string("abcde"), 5);
    _test_string(gl_string("abcdefghij"), gl_string("abcdefghij"), 0);
    _test_string(gl_string("abcdefghij"), gl_string("abcdefghijklmnopqrst"), -10);
    _test_string(gl_string("abcdefghijklmnopqrst"), gl_string(""), 20);
    _test_string(gl_string("abcdefghijklmnopqrst"), gl_string("abcde"), 15);
    _test_string(gl_string("abcdefghijklmnopqrst"), gl_string("abcdefghij"), 10);
    _test_string(gl_string("abcdefghijklmnopqrst"), gl_string("abcdefghijklmnopqrst"), 0);
  }
  
  ////////////////////////////////////////////////////////////////////////////////
  
  void _test_pointer(const gl_string& s, const char* str, int x) {
    TS_ASSERT_EQUALS(sign(s.compare(str)), sign(x));
  }

  void test_pointer_basic() {
    _test_pointer(gl_string(""), "", 0);
    _test_pointer(gl_string(""), "abcde", -5);
    _test_pointer(gl_string(""), "abcdefghij", -10);
    _test_pointer(gl_string(""), "abcdefghijklmnopqrst", -20);
    _test_pointer(gl_string("abcde"), "", 5);
    _test_pointer(gl_string("abcde"), "abcde", 0);
    _test_pointer(gl_string("abcde"), "abcdefghij", -5);
    _test_pointer(gl_string("abcde"), "abcdefghijklmnopqrst", -15);
    _test_pointer(gl_string("abcdefghij"), "", 10);
    _test_pointer(gl_string("abcdefghij"), "abcde", 5);
    _test_pointer(gl_string("abcdefghij"), "abcdefghij", 0);
    _test_pointer(gl_string("abcdefghij"), "abcdefghijklmnopqrst", -10);
    _test_pointer(gl_string("abcdefghijklmnopqrst"), "", 20);
    _test_pointer(gl_string("abcdefghijklmnopqrst"), "abcde", 15);
    _test_pointer(gl_string("abcdefghijklmnopqrst"), "abcdefghij", 10);
    _test_pointer(gl_string("abcdefghijklmnopqrst"), "abcdefghijklmnopqrst", 0);
  }
  
  ////////////////////////////////////////////////////////////////////////////////

  void _test_size_size_ptr(const gl_string& s, size_t pos1, size_t n1, const char* str, int x) {

    if(pos1 > s.size()) {
#ifndef NDEBUG
      auto f = [&](){s.compare(pos1, n1, str);};
      TS_ASSERT_THROWS_ANYTHING(f());
#endif
    } else {    
      TS_ASSERT_EQUALS(sign(s.compare(pos1, n1, str)), sign(x));
    }
  }
  
  void test_size_size_ptr__0() {
    _test_size_size_ptr(gl_string(""), 0, 0, "", 0);
    _test_size_size_ptr(gl_string(""), 0, 0, "abcde", -5);
    _test_size_size_ptr(gl_string(""), 0, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string(""), 0, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string(""), 0, 1, "", 0);
    _test_size_size_ptr(gl_string(""), 0, 1, "abcde", -5);
    _test_size_size_ptr(gl_string(""), 0, 1, "abcdefghij", -10);
    _test_size_size_ptr(gl_string(""), 0, 1, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string(""), 1, 0, "", 0);
    _test_size_size_ptr(gl_string(""), 1, 0, "abcde", 0);
    _test_size_size_ptr(gl_string(""), 1, 0, "abcdefghij", 0);
    _test_size_size_ptr(gl_string(""), 1, 0, "abcdefghijklmnopqrst", 0);
    _test_size_size_ptr(gl_string("abcde"), 0, 0, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 0, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcde"), 0, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcde"), 0, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcde"), 0, 1, "", 1);
    _test_size_size_ptr(gl_string("abcde"), 0, 1, "abcde", -4);
    _test_size_size_ptr(gl_string("abcde"), 0, 1, "abcdefghij", -9);
    _test_size_size_ptr(gl_string("abcde"), 0, 1, "abcdefghijklmnopqrst", -19);
    _test_size_size_ptr(gl_string("abcde"), 0, 2, "", 2);
    _test_size_size_ptr(gl_string("abcde"), 0, 2, "abcde", -3);
    _test_size_size_ptr(gl_string("abcde"), 0, 2, "abcdefghij", -8);
    _test_size_size_ptr(gl_string("abcde"), 0, 2, "abcdefghijklmnopqrst", -18);
    _test_size_size_ptr(gl_string("abcde"), 0, 4, "", 4);
    _test_size_size_ptr(gl_string("abcde"), 0, 4, "abcde", -1);
    _test_size_size_ptr(gl_string("abcde"), 0, 4, "abcdefghij", -6);
    _test_size_size_ptr(gl_string("abcde"), 0, 4, "abcdefghijklmnopqrst", -16);
    _test_size_size_ptr(gl_string("abcde"), 0, 5, "", 5);
    _test_size_size_ptr(gl_string("abcde"), 0, 5, "abcde", 0);
    _test_size_size_ptr(gl_string("abcde"), 0, 5, "abcdefghij", -5);
    _test_size_size_ptr(gl_string("abcde"), 0, 5, "abcdefghijklmnopqrst", -15);
    _test_size_size_ptr(gl_string("abcde"), 0, 6, "", 5);
    _test_size_size_ptr(gl_string("abcde"), 0, 6, "abcde", 0);
    _test_size_size_ptr(gl_string("abcde"), 0, 6, "abcdefghij", -5);
    _test_size_size_ptr(gl_string("abcde"), 0, 6, "abcdefghijklmnopqrst", -15);
    _test_size_size_ptr(gl_string("abcde"), 1, 0, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 1, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcde"), 1, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcde"), 1, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcde"), 1, 1, "", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 1, "abcde", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 1, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 1, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 2, "", 2);
    _test_size_size_ptr(gl_string("abcde"), 1, 2, "abcde", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 2, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 2, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 3, "", 3);
    _test_size_size_ptr(gl_string("abcde"), 1, 3, "abcde", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 3, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 3, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 4, "", 4);
    _test_size_size_ptr(gl_string("abcde"), 1, 4, "abcde", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 4, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 4, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 5, "", 4);
    _test_size_size_ptr(gl_string("abcde"), 1, 5, "abcde", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 5, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcde"), 1, 5, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcde"), 2, 0, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 2, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcde"), 2, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcde"), 2, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcde"), 2, 1, "", 1);
    _test_size_size_ptr(gl_string("abcde"), 2, 1, "abcde", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 1, "abcdefghij", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 1, "abcdefghijklmnopqrst", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 2, "", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 2, "abcde", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 2, "abcdefghij", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 2, "abcdefghijklmnopqrst", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 3, "", 3);
    _test_size_size_ptr(gl_string("abcde"), 2, 3, "abcde", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 3, "abcdefghij", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 3, "abcdefghijklmnopqrst", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 4, "", 3);
    _test_size_size_ptr(gl_string("abcde"), 2, 4, "abcde", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 4, "abcdefghij", 2);
    _test_size_size_ptr(gl_string("abcde"), 2, 4, "abcdefghijklmnopqrst", 2);
    _test_size_size_ptr(gl_string("abcde"), 4, 0, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 4, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcde"), 4, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcde"), 4, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcde"), 4, 1, "", 1);
    _test_size_size_ptr(gl_string("abcde"), 4, 1, "abcde", 4);
    _test_size_size_ptr(gl_string("abcde"), 4, 1, "abcdefghij", 4);
    _test_size_size_ptr(gl_string("abcde"), 4, 1, "abcdefghijklmnopqrst", 4);
    _test_size_size_ptr(gl_string("abcde"), 4, 2, "", 1);
    _test_size_size_ptr(gl_string("abcde"), 4, 2, "abcde", 4);
    _test_size_size_ptr(gl_string("abcde"), 4, 2, "abcdefghij", 4);
    _test_size_size_ptr(gl_string("abcde"), 4, 2, "abcdefghijklmnopqrst", 4);
    _test_size_size_ptr(gl_string("abcde"), 5, 0, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 5, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcde"), 5, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcde"), 5, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcde"), 5, 1, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 5, 1, "abcde", -5);
    _test_size_size_ptr(gl_string("abcde"), 5, 1, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcde"), 5, 1, "abcdefghijklmnopqrst", -20);
  }

  void test_size_size_ptr__1() {
    _test_size_size_ptr(gl_string("abcde"), 6, 0, "", 0);
    _test_size_size_ptr(gl_string("abcde"), 6, 0, "abcde", 0);
    _test_size_size_ptr(gl_string("abcde"), 6, 0, "abcdefghij", 0);
    _test_size_size_ptr(gl_string("abcde"), 6, 0, "abcdefghijklmnopqrst", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 1, "abcde", -4);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 1, "abcdefghij", -9);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", -19);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 5, "", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 5, "abcde", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 5, "abcdefghij", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", -15);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 9, "", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 9, "abcde", 4);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 9, "abcdefghij", -1);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", -11);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 10, "", 10);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 10, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 10, "abcdefghij", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 11, "", 10);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 11, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 11, "abcdefghij", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 1, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 1, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 4, "", 4);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 4, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 4, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 8, "", 8);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 8, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 8, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 9, "", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 9, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 9, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 10, "", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 10, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 10, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 1, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 1, "abcdefghij", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 2, "", 2);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 2, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 2, "abcdefghij", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 4, "", 4);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 4, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 4, "abcdefghij", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 5, "", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 5, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 5, "abcdefghij", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 6, "", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 6, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 6, "abcdefghij", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 5);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 1, "abcde", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 1, "abcdefghij", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 2, "", 1);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 2, "abcde", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 2, "abcdefghij", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 9);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 1, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 1, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 1, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghij"), 11, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 11, 0, "abcde", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 11, 0, "abcdefghij", 0);
    _test_size_size_ptr(gl_string("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0);
  }

  void test_size_size_ptr__2() {
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcde", -4);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", -9);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", -19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 10, "", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcde", 5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 19, "", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcde", 14);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", -1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 20, "", 20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcde", 15);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 21, "", 20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcde", 15);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 9, "", 9);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 18, "", 18);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 19, "", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 20, "", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcde", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcde", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 5, "", 5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcde", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 9, "", 9);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcde", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 10, "", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcde", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 11, "", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcde", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 1, "", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcde", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 2, "", 1);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcde", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 1, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcde", -5);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", -10);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", -20);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 21, 0, "", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcde", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0);
    _test_size_size_ptr(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0);
  }
  
  ////////////////////////////////////////////////////////////////////////////////
  
  void _test_size_size_string(const gl_string& s, size_t pos1, size_t n1, const gl_string& str, int x) {
    if(pos1 > s.size()) {
#ifndef NDEBUG
      auto f = [&](){s.compare(pos1, n1, str);};
      TS_ASSERT_THROWS_ANYTHING(f());
#endif
    } else {    
      TS_ASSERT_EQUALS(sign(s.compare(pos1, n1, str)), sign(x));
    }
  }
  
  void test_size_size_string0() {
    _test_size_size_string(gl_string(""), 0, 0, gl_string(""), 0);
    _test_size_size_string(gl_string(""), 0, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string(""), 0, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string(""), 0, 1, gl_string(""), 0);
    _test_size_size_string(gl_string(""), 0, 1, gl_string("abcde"), -5);
    _test_size_size_string(gl_string(""), 0, 1, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string(""), 1, 0, gl_string(""), 0);
    _test_size_size_string(gl_string(""), 1, 0, gl_string("abcde"), 0);
    _test_size_size_string(gl_string(""), 1, 0, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0);
    _test_size_size_string(gl_string("abcde"), 0, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 0, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcde"), 0, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcde"), 0, 1, gl_string("abcde"), -4);
    _test_size_size_string(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), -9);
    _test_size_size_string(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), -19);
    _test_size_size_string(gl_string("abcde"), 0, 2, gl_string(""), 2);
    _test_size_size_string(gl_string("abcde"), 0, 2, gl_string("abcde"), -3);
    _test_size_size_string(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), -8);
    _test_size_size_string(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), -18);
    _test_size_size_string(gl_string("abcde"), 0, 4, gl_string(""), 4);
    _test_size_size_string(gl_string("abcde"), 0, 4, gl_string("abcde"), -1);
    _test_size_size_string(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), -6);
    _test_size_size_string(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), -16);
    _test_size_size_string(gl_string("abcde"), 0, 5, gl_string(""), 5);
    _test_size_size_string(gl_string("abcde"), 0, 5, gl_string("abcde"), 0);
    _test_size_size_string(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), -5);
    _test_size_size_string(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), -15);
    _test_size_size_string(gl_string("abcde"), 0, 6, gl_string(""), 5);
    _test_size_size_string(gl_string("abcde"), 0, 6, gl_string("abcde"), 0);
    _test_size_size_string(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), -5);
    _test_size_size_string(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), -15);
    _test_size_size_string(gl_string("abcde"), 1, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 1, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcde"), 1, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcde"), 1, 1, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 2, gl_string(""), 2);
    _test_size_size_string(gl_string("abcde"), 1, 2, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 3, gl_string(""), 3);
    _test_size_size_string(gl_string("abcde"), 1, 3, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 4, gl_string(""), 4);
    _test_size_size_string(gl_string("abcde"), 1, 4, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 5, gl_string(""), 4);
    _test_size_size_string(gl_string("abcde"), 1, 5, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcde"), 2, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 2, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcde"), 2, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcde"), 2, 1, gl_string("abcde"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 2, gl_string(""), 2);
    _test_size_size_string(gl_string("abcde"), 2, 2, gl_string("abcde"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 3, gl_string(""), 3);
    _test_size_size_string(gl_string("abcde"), 2, 3, gl_string("abcde"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 4, gl_string(""), 3);
    _test_size_size_string(gl_string("abcde"), 2, 4, gl_string("abcde"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 2);
    _test_size_size_string(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 2);
    _test_size_size_string(gl_string("abcde"), 4, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 4, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcde"), 4, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcde"), 4, 1, gl_string("abcde"), 4);
    _test_size_size_string(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 4);
    _test_size_size_string(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 4);
    _test_size_size_string(gl_string("abcde"), 4, 2, gl_string(""), 1);
    _test_size_size_string(gl_string("abcde"), 4, 2, gl_string("abcde"), 4);
    _test_size_size_string(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 4);
    _test_size_size_string(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 4);
    _test_size_size_string(gl_string("abcde"), 5, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 5, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcde"), 5, 1, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 5, 1, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), -20);
  }

  void test_size_size_string1()
  {
    _test_size_size_string(gl_string("abcde"), 6, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcde"), 6, 0, gl_string("abcde"), 0);
    _test_size_size_string(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0);
    _test_size_size_string(gl_string("abcdefghij"), 0, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghij"), 0, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), -4);
    _test_size_size_string(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), -9);
    _test_size_size_string(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), -19);
    _test_size_size_string(gl_string("abcdefghij"), 0, 5, gl_string(""), 5);
    _test_size_size_string(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0);
    _test_size_size_string(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), -15);
    _test_size_size_string(gl_string("abcdefghij"), 0, 9, gl_string(""), 9);
    _test_size_size_string(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 4);
    _test_size_size_string(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), -1);
    _test_size_size_string(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), -11);
    _test_size_size_string(gl_string("abcdefghij"), 0, 10, gl_string(""), 10);
    _test_size_size_string(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 0, 11, gl_string(""), 10);
    _test_size_size_string(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 1, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghij"), 1, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 4, gl_string(""), 4);
    _test_size_size_string(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 8, gl_string(""), 8);
    _test_size_size_string(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 9, gl_string(""), 9);
    _test_size_size_string(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 10, gl_string(""), 9);
    _test_size_size_string(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghij"), 5, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghij"), 5, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 2, gl_string(""), 2);
    _test_size_size_string(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 4, gl_string(""), 4);
    _test_size_size_string(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 5, gl_string(""), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 6, gl_string(""), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 5);
    _test_size_size_string(gl_string("abcdefghij"), 9, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghij"), 9, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 9);
    _test_size_size_string(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 9);
    _test_size_size_string(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 9);
    _test_size_size_string(gl_string("abcdefghij"), 9, 2, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 9);
    _test_size_size_string(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 9);
    _test_size_size_string(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 9);
    _test_size_size_string(gl_string("abcdefghij"), 10, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghij"), 10, 1, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghij"), 11, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0);
    _test_size_size_string(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0);
  }

  void test_size_size_string2()
  {
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), -4);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), -9);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), -19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string(""), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string(""), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 14);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 9);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), -1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string(""), 20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 15);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string(""), 20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 15);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string(""), 9);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string(""), 18);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string(""), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string(""), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string(""), 5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string(""), 9);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string(""), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string(""), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string(""), 1);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 19);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), -5);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), -10);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), -20);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string(""), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0);
    _test_size_size_string(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0);
  }

  ////////////////////////////////////////////////////////////////////////////////

  void _test_size_size_ptr_size(const gl_string& s, size_t pos, size_t n1, const char* str, size_t n2, int x) {
    auto f = [&](){ return s.compare(pos, n1, str, n2);};
      
    if(pos > s.size()) {
#ifndef NDEBUG
      TS_ASSERT_THROWS_ANYTHING(f());
#endif
    } else {    
      TS_ASSERT_EQUALS(sign(f()), sign(x));
    }
  }

  void test_size_size_ptr_size0()
  {
    _test_size_size_ptr_size(gl_string(""), 0, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string(""), 0, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string(""), 0, 1, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcde", 2, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcde", 4, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghij", 9, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghijklmnopqrst", 19, 0);
    _test_size_size_ptr_size(gl_string(""), 1, 0, "abcdefghijklmnopqrst", 20, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcde", 2, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcde", 4, -3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcde", 5, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghij", 5, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghij", 9, -8);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghij", 10, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcde", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcde", 2, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcde", 4, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcde", 5, -3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghij", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghij", 5, -3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghij", 9, -7);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghij", 10, -8);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghijklmnopqrst", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghijklmnopqrst", 10, -8);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghijklmnopqrst", 19, -17);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 2, "abcdefghijklmnopqrst", 20, -18);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcde", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcde", 1, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcde", 2, 2);
  }

  void test_size_size_ptr_size1()
  {
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcde", 4, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcde", 5, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghij", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghij", 1, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghij", 5, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghij", 9, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghij", 10, -6);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghijklmnopqrst", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghijklmnopqrst", 1, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghijklmnopqrst", 10, -6);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghijklmnopqrst", 19, -15);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 4, "abcdefghijklmnopqrst", 20, -16);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcde", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcde", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcde", 2, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghij", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghij", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghij", 9, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghij", 10, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghijklmnopqrst", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghijklmnopqrst", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghijklmnopqrst", 10, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghijklmnopqrst", 19, -14);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 5, "abcdefghijklmnopqrst", 20, -15);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcde", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcde", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcde", 2, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghij", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghij", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghij", 9, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghij", 10, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghijklmnopqrst", 0, 5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghijklmnopqrst", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghijklmnopqrst", 10, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghijklmnopqrst", 19, -14);
    _test_size_size_ptr_size(gl_string("abcde"), 0, 6, "abcdefghijklmnopqrst", 20, -15);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcde", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghij", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghijklmnopqrst", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 2, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcde", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghij", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghij", 1, 1);
  }

  void test_size_size_ptr_size2()
  {
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghijklmnopqrst", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 3, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcde", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghij", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghijklmnopqrst", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 4, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcde", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghij", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghijklmnopqrst", 0, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 1, 5, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcde", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcde", 2, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcde", 4, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcde", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghij", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghij", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghij", 9, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghij", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghijklmnopqrst", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghijklmnopqrst", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghijklmnopqrst", 19, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 1, "abcdefghijklmnopqrst", 20, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcde", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcde", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcde", 2, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcde", 4, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcde", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghij", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghij", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghij", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghij", 9, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghij", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghijklmnopqrst", 0, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghijklmnopqrst", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghijklmnopqrst", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghijklmnopqrst", 19, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 2, "abcdefghijklmnopqrst", 20, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcde", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcde", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcde", 2, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcde", 4, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcde", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghij", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghij", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghij", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghij", 9, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghij", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghijklmnopqrst", 0, 3);
  }

  void test_size_size_ptr_size3()
  {
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghijklmnopqrst", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghijklmnopqrst", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghijklmnopqrst", 19, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 3, "abcdefghijklmnopqrst", 20, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcde", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcde", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcde", 2, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcde", 4, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcde", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghij", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghij", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghij", 5, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghij", 9, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghij", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghijklmnopqrst", 0, 3);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghijklmnopqrst", 1, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghijklmnopqrst", 10, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghijklmnopqrst", 19, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 2, 4, "abcdefghijklmnopqrst", 20, 2);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcde", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcde", 2, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcde", 4, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcde", 5, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghij", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghij", 5, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghij", 9, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghij", 10, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghijklmnopqrst", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghijklmnopqrst", 10, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghijklmnopqrst", 19, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 1, "abcdefghijklmnopqrst", 20, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcde", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcde", 2, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcde", 4, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcde", 5, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghij", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghij", 5, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghij", 9, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghij", 10, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghijklmnopqrst", 1, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghijklmnopqrst", 10, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghijklmnopqrst", 19, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 4, 2, "abcdefghijklmnopqrst", 20, 4);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcde"), 5, 1, "abcdefghijklmnopqrst", 20, -20);
  }

  void test_size_size_ptr_size4()
  {
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcde", 2, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcde", 4, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghij", 9, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghijklmnopqrst", 19, 0);
    _test_size_size_ptr_size(gl_string("abcde"), 6, 0, "abcdefghijklmnopqrst", 20, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcde", 2, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcde", 4, -3);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcde", 5, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghij", 5, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghij", 9, -8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghij", 10, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcde", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcde", 1, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcde", 2, 3);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghij", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghij", 1, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghij", 9, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghij", 10, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 1, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 10, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 19, -14);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 20, -15);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcde", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcde", 1, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcde", 2, 7);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcde", 4, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcde", 5, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghij", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghij", 1, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghij", 5, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghij", 9, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghij", 10, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 1, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 10, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 19, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 20, -11);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcde", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcde", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcde", 2, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcde", 4, 6);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghij", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghij", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 19, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 20, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcde", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcde", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcde", 2, 8);
  }

  void test_size_size_ptr_size5()
  {
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcde", 4, 6);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghij", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghij", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 19, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 20, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcde", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghij", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "", 0, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcde", 0, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghij", 0, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 0, 8);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcde", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghij", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcde", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghij", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghij", 1, 1);
  }

  void test_size_size_ptr_size6()
  {
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcde", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcde", 2, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcde", 4, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghij", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghij", 9, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghij", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 19, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 20, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "", 0, 2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcde", 0, 2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcde", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcde", 2, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcde", 4, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghij", 0, 2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghij", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghij", 9, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghij", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 0, 2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 19, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 20, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcde", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcde", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcde", 2, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcde", 4, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghij", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghij", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghij", 9, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghij", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 0, 4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 19, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 20, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcde", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcde", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcde", 2, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcde", 4, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghij", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghij", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghij", 9, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghij", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 19, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 20, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcde", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcde", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcde", 2, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcde", 4, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghij", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghij", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghij", 9, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghij", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 0, 5);
  }

  void test_size_size_ptr_size7()
  {
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 1, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 10, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 19, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 20, 5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcde", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcde", 2, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcde", 4, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcde", 5, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghij", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghij", 5, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghij", 9, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghij", 10, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 10, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 19, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 20, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcde", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcde", 2, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcde", 4, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcde", 5, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghij", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghij", 5, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghij", 9, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghij", 10, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 10, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 19, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 20, 9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcde", 2, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcde", 4, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghij", 9, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 19, 0);
    _test_size_size_ptr_size(gl_string("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 20, 0);
  }

  void test_size_size_ptr_size8()
  {
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcde", 2, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcde", 4, -3);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcde", 5, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 5, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 9, -8);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 10, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcde", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcde", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcde", 2, 8);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcde", 4, 6);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcde", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 5, 5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 1, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 19, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 20, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcde", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcde", 1, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcde", 2, 17);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcde", 4, 15);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcde", 5, 14);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 1, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 5, 14);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 10, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 1, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 10, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 19, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 20, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcde", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcde", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcde", 2, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcde", 4, 16);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcde", 5, 15);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 5, 15);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 9, 11);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 20, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcde", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcde", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcde", 2, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcde", 4, 16);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcde", 5, 15);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 5, 15);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 9, 11);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0, 20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 20, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcde", 2, -2);
  }

  void test_size_size_ptr_size9()
  {
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcde", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "", 0, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcde", 0, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 0, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 0, 18);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcde", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcde", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcde", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcde", 2, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcde", 4, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcde", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 5, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 9, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 0, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 10, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 19, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 20, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 1, -1);
  }

  void test_size_size_ptr_size10()
  {
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcde", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcde", 2, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcde", 4, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcde", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 9, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 19, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 20, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcde", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcde", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcde", 2, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcde", 4, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcde", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 9, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 0, 5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 19, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 20, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcde", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcde", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcde", 2, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcde", 4, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcde", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 9, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 0, 9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 19, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 20, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcde", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcde", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcde", 2, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcde", 4, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcde", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 9, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 19, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 20, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcde", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcde", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcde", 2, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcde", 4, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcde", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 5, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 9, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 0, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 1, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 19, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 20, 10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 0, 0);
  }

  void test_size_size_ptr_size11()
  {
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcde", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcde", 2, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcde", 4, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcde", 5, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 5, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 9, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 10, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 10, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 20, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcde", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcde", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcde", 2, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcde", 4, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcde", 5, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 5, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 9, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 10, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 0, 1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 1, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 10, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 20, 19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcde", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcde", 2, -2);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcde", 4, -4);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcde", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 5, -5);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 9, -9);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 1, -1);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 10, -10);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 19, -19);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 20, -20);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcde", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcde", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcde", 2, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcde", 4, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcde", 5, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 5, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 9, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 1, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 10, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 19, 0);
    _test_size_size_ptr_size(gl_string("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 20, 0);
  }

  void _test_s_s_str_s_s(const gl_string& s, size_t pos1, size_t n1,
                         const gl_string& str, size_t pos2, size_t n2, int x) {
    
    auto f = [&](){return s.compare(pos1, n1, str, pos2, n2);};

    if(pos1 > s.size() || pos2 > str.size()) {
#ifndef NDEBUG
      TS_ASSERT_THROWS_ANYTHING(f());
#endif
    } else {    
      TS_ASSERT_EQUALS(sign(f()), sign(x));
    }
  }

  void _test_s_s_str_s_s_npos(const gl_string& s, size_t pos1, size_t n1,
                              const gl_string& str, size_t pos2, int x) {

    auto f = [&](){return s.compare(pos1, n1, str, pos2); }; 

    if(pos1 > s.size() || pos2 > str.size()) {
#ifndef NDEBUG
      TS_ASSERT_THROWS_ANYTHING(f());
#endif
    } else {    
      TS_ASSERT_EQUALS(sign(f()), sign(x));
    }
  }


  void test_s_s_str_s_s_0()
  {
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcde"), 6, 0, 0);
  }

  void test_s_s_str_s_s_1()
  {
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 0, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 0, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 0, 4, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 1, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 1, 3, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 2, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 2, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 2, 3, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 2, 4, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 4, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 4, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 0, 9, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 1, 8, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 5, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 5, 4, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 5, 5, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 5, 6, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 9, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 9, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
  }

  void test_s_s_str_s_s_2()
  {
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string(""), 1, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 0, 0, 1);
  }

  void test_s_s_str_s_s_3()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 0, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 0, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 0, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 0, 6, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 0, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 0, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 0, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 0, 11, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string(""), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string(""), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 0, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 0, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 0, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 0, 6, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 2, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 4, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 5, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 0, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 0, 9, -7);
  }

  void test_s_s_str_s_s_4()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 0, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 0, 11, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 9, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 10, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string(""), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string(""), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 0, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 0, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 0, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 0, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 0, 6, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 2, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 4, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 0, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 0, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 0, 9, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 0, 10, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 0, 11, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 9, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 10, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 0, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 0, 10, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 0, 19, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 0, 20, -16);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 0, 21, -16);
  }

  void test_s_s_str_s_s_5()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 19, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 20, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 20, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 4, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string(""), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string(""), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 0, 2, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 2, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 4, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 0, 9, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 0, 10, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 0, 11, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 9, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 10, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 10, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 19, -14);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 20, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 21, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 19, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 20, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 20, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 5, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string(""), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string(""), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 0, 2, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 0, 5, 0);
  }

  void test_s_s_str_s_s_6()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 2, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 4, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 0, 9, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 0, 10, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 0, 11, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 9, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 10, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 0, 10, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 0, 19, -14);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 0, 20, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 0, 21, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 19, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 20, 0, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 20, 1, 5);
    _test_s_s_str_s_s(gl_string("abcde"), 0, 6, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 1, 1, -1);
  }

  void test_s_s_str_s_s_7()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 1, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 1, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 1, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1, 8, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 1, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -17);
  }

  void test_s_s_str_s_s_8()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string(""), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string(""), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 1, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 1, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 1, 5, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 2, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 4, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 5, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1, 8, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1, 9, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 1, 10, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 9, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 10, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, -16);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string(""), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string(""), 0, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 1, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 1, 2, 1);
  }

  void test_s_s_str_s_s_9()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 1, 3, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 2, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 4, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 5, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 5, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1, 8, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1, 9, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 1, 10, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 5, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 9, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 10, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 10, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1, 9, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1, 18, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1, 19, -16);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 1, 20, -16);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 10, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 19, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 20, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 20, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 3, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string(""), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string(""), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 1, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 2, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 4, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1, 8, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1, 9, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 1, 10, -5);
  }

  void test_s_s_str_s_s_10()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 9, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 10, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 9, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 18, -14);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 19, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 20, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 19, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 20, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 20, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 4, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string(""), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string(""), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 1, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 2, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 4, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1, 8, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1, 9, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 1, 10, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 9, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 10, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1, 9, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1, 18, -14);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1, 19, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 1, 20, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
  }

  void test_s_s_str_s_s_11()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 19, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 20, 0, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 20, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 1, 5, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 0, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 0, 4, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 0, 6, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 1, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 1, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 2, 0, 1);
  }

  void test_s_s_str_s_s_12()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 2, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 4, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 4, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 0, 9, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 0, 11, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 1, 8, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 1, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 5, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 5, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 5, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 5, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 5, 6, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 9, 1, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 9, 2, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string(""), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string(""), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 0, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 0, 4, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 0, 6, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 1, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 1, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 2, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 2, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 2, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 4, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 4, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 4, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 5, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 0, 9, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 0, 11, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 1, 8, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 1, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 5, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 5, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 5, 4, -3);
  }

  void test_s_s_str_s_s_13()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 5, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 5, 6, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 9, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 9, 1, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 9, 2, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 10, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string(""), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string(""), 0, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 0, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 0, 4, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 0, 6, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 1, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 1, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 2, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 2, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 2, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 2, 3, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 2, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 4, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 4, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 4, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 5, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 5, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 0, 9, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 0, 11, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 1, 8, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 1, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 5, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 5, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 5, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 5, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 5, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 5, 6, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 9, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 9, 1, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 9, 2, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 10, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 10, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 0, 19, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 0, 20, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 0, 21, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 1, 18, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 1, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 1, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 10, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 10, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 10, 5, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 10, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 10, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 10, 11, -8);
  }

  void test_s_s_str_s_s_14()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 19, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 19, 1, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 19, 2, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 20, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 20, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 3, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string(""), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string(""), 0, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 0, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 0, 4, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 0, 6, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 1, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 1, 5, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 2, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 2, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 2, 2, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 2, 3, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 2, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 4, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 4, 1, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 4, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 5, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 5, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 0, 5, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 0, 9, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 0, 11, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 1, 4, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 1, 8, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 1, 10, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 5, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 5, 1, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 5, 2, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 5, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 5, 5, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 5, 6, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 9, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 9, 1, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 9, 2, -7);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 10, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 10, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 0, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 0, 10, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 0, 19, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 0, 20, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 0, 21, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 1, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 1, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 1, 9, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 1, 18, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 1, 19, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 1, 20, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 10, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 10, 1, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 10, 5, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 10, 9, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 10, 10, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 10, 11, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 19, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 19, 1, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 19, 2, -17);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 20, 0, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 20, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 2, 4, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 2, 4, -3);
  }

  void test_s_s_str_s_s_15()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 0, 2, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 0, 4, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 0, 5, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 0, 6, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 1, 2, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 1, 3, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 1, 4, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 1, 5, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 2, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 2, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 2, 3, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 2, 4, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 4, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 4, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 0, 5, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 0, 9, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 0, 10, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 0, 11, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 1, 4, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 1, 8, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 1, 9, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 1, 10, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 5, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 5, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 5, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 5, 6, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 9, 1, -5);
  }

  void test_s_s_str_s_s_16()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 9, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 0, 2, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 0, 4, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 0, 5, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 0, 6, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 1, 2, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 1, 3, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 1, 4, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 1, 5, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 2, 1, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 2, 2, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 2, 3, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 2, 4, 2);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 4, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 4, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 0, 5, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 0, 9, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 0, 10, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 0, 11, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 1, 4, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 1, 8, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 1, 9, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 1, 10, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 5, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 5, 4, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 5, 5, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 5, 6, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 9, 1, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 9, 2, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, 4);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, 3);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, -6);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, -15);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
  }

  void test_s_s_str_s_s_17()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcde"), 4, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 5, 0, 0);
  }

  void test_s_s_str_s_s_18()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 5, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 0, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 0, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 1, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 1, 3, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 2, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 2, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 2, 3, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 2, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 4, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 4, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0, 9, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 1, 8, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 5, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 5, 4, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 5, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 5, 6, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 9, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 9, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghij"), 11, 0, 0);
  }

  void test_s_s_str_s_s_19()
  {
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcde"), 6, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string(""), 0, 1, 1);
  }

  void test_s_s_str_s_s_20()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 0, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 0, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 0, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 0, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 0, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 0, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 0, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 0, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string(""), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string(""), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 2, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 4, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 0, 1, 4);
  }

  void test_s_s_str_s_s_21()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 0, 9, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 0, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 0, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 9, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 10, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 19, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 20, -15);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 0, 21, -15);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 19, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 20, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 20, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 5, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string(""), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string(""), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 0, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 0, 2, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 0, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 0, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 0, 6, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 2, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 4, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 5, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 0, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 0, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 0, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 0, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 0, 11, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 9, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 0, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 0, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 0, 19, -10);
  }

  void test_s_s_str_s_s_22()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 0, 20, -11);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 0, 21, -11);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 19, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 20, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 20, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 9, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string(""), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string(""), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 0, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 0, 4, 6);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 2, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 4, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 5, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 9, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 10, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 19, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 20, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 21, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 19, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 20, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 20, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 10, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string(""), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string(""), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 0, 2, 8);
  }

  void test_s_s_str_s_s_23()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 0, 4, 6);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 2, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 4, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 5, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 9, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 10, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 0, 19, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 0, 20, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 0, 21, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 19, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 20, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 20, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 0, 11, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 0, 11, -10);
  }

  void test_s_s_str_s_s_24()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 1, 5, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1, 8, -7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 1, 10, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
  }

  void test_s_s_str_s_s_25()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -17);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string(""), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string(""), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1, 2, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1, 3, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 2, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 4, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1, 8, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1, 9, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 1, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 9, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 10, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 9, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 18, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 19, -15);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 1, 20, -15);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 19, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 20, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 20, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 4, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string(""), 0, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string(""), 0, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 0, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1, 0, 8);
  }

  void test_s_s_str_s_s_26()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1, 1, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1, 2, 6);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1, 3, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 1, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 2, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 4, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 5, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 5, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 0, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1, 1, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1, 8, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 5, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 9, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 10, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 10, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 0, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1, 1, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1, 18, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1, 19, -11);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 1, 20, -11);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 10, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 19, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 20, 0, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 20, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 8, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string(""), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string(""), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1, 2, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1, 3, 6);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 1, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 2, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 4, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 5, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1, 8, 1);
  }

  void test_s_s_str_s_s_27()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 9, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 18, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 19, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 20, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 19, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 20, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 20, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 9, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string(""), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string(""), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1, 2, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1, 3, 6);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 1, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 2, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 4, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 5, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1, 8, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 9, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1, 18, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1, 19, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 1, 20, -10);
  }

  void test_s_s_str_s_s_28()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 19, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 20, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 20, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 1, 10, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 0, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 0, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 1, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 1, 3, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 1, 4, 4);
  }

  void test_s_s_str_s_s_29()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 1, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 2, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 2, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 2, 3, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 2, 4, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 4, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 4, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 0, 9, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 0, 11, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 1, 8, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 1, 10, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 9, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 9, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string(""), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string(""), 0, 1, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 0, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 0, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 1, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 1, 3, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 1, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 2, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 2, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 2, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 2, 3, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 2, 4, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 4, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 4, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 4, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 5, 1, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 0, 9, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 0, 11, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 1, 8, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 1, 10, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5, 1, 1);
  }

  void test_s_s_str_s_s_30()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5, 5, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 5, 6, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 9, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 9, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 9, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 10, 1, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string(""), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string(""), 0, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 0, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 0, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 1, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 1, 3, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 1, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 2, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 2, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 2, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 2, 3, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 2, 4, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 4, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 4, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 4, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 0, 9, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 0, 11, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 1, 8, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 1, 10, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5, 2, 2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 5, 6, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 9, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 9, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 9, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 10, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 0, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 0, 19, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 0, 20, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 0, 21, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 1, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 1, 18, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 1, 19, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 1, 20, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 10, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 10, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 10, 9, -5);
  }

  void test_s_s_str_s_s_31()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 10, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 10, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 19, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 19, 1, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 19, 2, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 20, 0, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 20, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 4, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string(""), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string(""), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 0, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 0, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 1, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 1, 3, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 1, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 2, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 2, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 2, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 2, 3, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 2, 4, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 4, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 4, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 4, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 0, 9, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 0, 11, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 1, 8, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 1, 10, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 5, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 9, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 9, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 9, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 10, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 0, 19, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 0, 20, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 0, 21, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 1, 18, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 1, 19, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 1, 20, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 10, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 10, 9, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 10, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 10, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 19, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 19, 1, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 19, 2, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 20, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 20, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 5, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string(""), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string(""), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 0, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 0, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 1, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 1, 3, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 1, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 2, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 2, 1, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 2, 2, 3);
  }

  void test_s_s_str_s_s_32()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 2, 3, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 2, 4, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 4, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 4, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 4, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 0, 9, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 0, 11, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 1, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 1, 8, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 1, 10, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5, 2, 3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 5, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 9, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 9, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 9, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 10, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 0, 10, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 0, 19, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 0, 20, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 0, 21, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 1, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 1, 9, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 1, 18, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 1, 19, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 1, 20, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 10, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 10, 9, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 10, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 10, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 19, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 19, 1, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 19, 2, -14);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 20, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 20, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 5, 6, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 5, 6, -5);
  }

  void test_s_s_str_s_s_33()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 0, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 0, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 0, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 0, 6, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 1, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 1, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 1, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 1, 5, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 2, 1, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 2, 2, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 2, 3, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 2, 4, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 4, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 4, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 0, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 0, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 0, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 0, 11, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 1, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 1, 8, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 1, 9, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 1, 10, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 5, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 5, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 5, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 5, 6, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 9, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 9, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -10);
  }

  void test_s_s_str_s_s_34()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 0, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 0, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 0, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 0, 6, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 1, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 1, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 1, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 1, 5, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 2, 1, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 2, 2, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 2, 3, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 2, 4, 7);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 4, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 4, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 0, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 0, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 0, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 0, 11, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 1, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 1, 8, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 1, 9, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 1, 10, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 5, 1, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 5, 2, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 5, 4, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 5, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 5, 6, 4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 9, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 9, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, 9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, 8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 9, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 4, 1, -1);
  }

  void test_s_s_str_s_s_35()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 10, 0, 0);
  }

  void test_s_s_str_s_s_36()
  {
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 10, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 1, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 1, 3, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 2, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 2, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 2, 3, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 2, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 4, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 4, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 1, 8, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 5, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 5, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 5, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 5, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 9, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 9, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghij"), 11, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
  }

  void test_s_s_str_s_s_37()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 0, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 0, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 0, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 0, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcde"), 6, 0, 0);
  }

  void test_s_s_str_s_s_38()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 0, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 0, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 0, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 0, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string(""), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string(""), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 0, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 0, 4, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 0, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 2, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 4, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 5, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 9, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 10, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 1, 9);
  }

  void test_s_s_str_s_s_39()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 19, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 20, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 0, 21, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 19, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 20, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 20, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 10, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string(""), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string(""), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 0, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 0, 2, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 0, 4, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 0, 5, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 0, 6, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 2, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 4, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 5, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 5, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 0, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 0, 5, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 0, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 0, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 0, 11, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 5, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 9, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 10, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 10, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 0, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 0, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 0, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 0, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 0, 21, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 10, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 19, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 20, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 20, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 19, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string(""), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string(""), 0, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 0, 0, 20);
  }

  void test_s_s_str_s_s_40()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 0, 2, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 0, 4, 16);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 0, 5, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 0, 6, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 1, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 2, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 4, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 5, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 5, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 0, 5, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 0, 9, 11);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 1, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 5, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 9, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 10, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 10, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 0, 21, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 1, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 10, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 19, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 20, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 20, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 20, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string(""), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string(""), 0, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 0, 2, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 0, 4, 16);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 0, 5, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 0, 6, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 1, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 1, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 1, 5, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 2, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 2, 1, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 2, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 2, 4, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 4, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 4, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 4, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 5, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 5, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 0, 5, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 0, 9, 11);
  }

  void test_s_s_str_s_s_41()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 1, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 1, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 1, 8, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 1, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 5, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 5, 1, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 5, 2, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 5, 4, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 9, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 9, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 9, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 10, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 10, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 0, 21, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 1, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 1, 9, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 1, 18, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 10, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 10, 1, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 10, 5, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 10, 9, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 19, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 19, 1, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 19, 2, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 20, 0, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 20, 1, 20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 0, 21, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
  }

  void test_s_s_str_s_s_42()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1, 3, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 1, 5, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1, 8, -7);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 1, 10, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string(""), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string(""), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 0, 5, 1);
  }

  void test_s_s_str_s_s_43()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1, 2, 7);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1, 3, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 1, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 2, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 4, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 5, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1, 8, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 9, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 18, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 19, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 1, 20, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 19, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 20, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 20, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 9, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string(""), 0, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string(""), 0, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 0, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1, 1, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1, 2, 16);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1, 3, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1, 4, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 1, 5, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 2, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 4, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 5, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 5, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 0, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1, 1, 17);
  }

  void test_s_s_str_s_s_44()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1, 4, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1, 8, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 1, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 5, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 9, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 10, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 10, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 0, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1, 1, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1, 18, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1, 19, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 1, 20, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 10, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 19, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 20, 0, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 20, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 18, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string(""), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string(""), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1, 2, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1, 3, 16);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1, 4, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 1, 5, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 2, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 4, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 5, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 5, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1, 4, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1, 8, 11);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 1, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 5, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 9, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 10, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 10, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1, 18, 1);
  }

  void test_s_s_str_s_s_45()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 1, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 10, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 19, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 20, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 20, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 19, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string(""), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string(""), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 0, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 0, 4, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 0, 6, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1, 2, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1, 3, 16);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1, 4, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 1, 5, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 2, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 2, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 2, 3, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 2, 4, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 4, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 4, 1, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 4, 2, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 5, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 5, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 0, 5, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 0, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 0, 11, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1, 4, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1, 8, 11);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 1, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 5, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 5, 1, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 5, 2, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 5, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 5, 6, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 9, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 9, 1, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 9, 2, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 10, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 10, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 0, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 0, 10, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 0, 19, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 0, 20, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 0, 21, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1, 18, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 1, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 10, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 10, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 10, 5, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 19, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 19, 1, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 19, 2, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 20, 0, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 20, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 1, 20, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 1, 2, -2);
  }

  void test_s_s_str_s_s_46()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 0, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 0, 4, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 0, 6, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 1, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 1, 3, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 1, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 2, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 2, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 2, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 2, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 4, 1, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 4, 2, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 0, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 1, 8, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 1, 10, 9);
  }

  void test_s_s_str_s_s_47()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 5, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 5, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 5, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 5, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 9, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 9, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string(""), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string(""), 0, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 0, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 0, 4, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 0, 6, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 1, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 1, 3, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 1, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 2, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 2, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 2, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 2, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 2, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 4, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 4, 1, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 4, 2, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 0, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 1, 8, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 1, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 5, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 5, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 5, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 5, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 5, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 9, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 9, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 9, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 10, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 0, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 0, 19, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 0, 20, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 0, 21, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 1, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 1, 18, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 1, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 1, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10, 1, 4);
  }

  void test_s_s_str_s_s_48()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10, 9, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10, 10, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 10, 11, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 19, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 19, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 19, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 20, 0, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 20, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 5, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string(""), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string(""), 0, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 0, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 0, 4, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 0, 6, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 1, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 1, 3, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 1, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 2, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 2, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 2, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 2, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 2, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 4, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 4, 1, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 4, 2, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 5, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 0, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 1, 8, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 1, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 5, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 5, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 5, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 5, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 5, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 9, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 9, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 9, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 0, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 0, 19, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 0, 20, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 0, 21, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 1, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 1, 18, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 1, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 1, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10, 5, 4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10, 10, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 10, 11, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 19, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 19, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 19, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 20, 0, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 20, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 9, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string(""), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string(""), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 0, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 0, 4, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 0, 6, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 1, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 1, 3, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 1, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 2, 0, 10);
  }

  void test_s_s_str_s_s_49()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 2, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 2, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 2, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 2, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 4, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 4, 1, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 4, 2, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 5, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 0, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 1, 8, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 1, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 5, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 5, 4, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 5, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 5, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 9, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 9, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 9, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 10, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 0, 19, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 0, 20, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 0, 21, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 1, 18, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 1, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 1, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 10, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 19, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 19, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 19, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 20, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 20, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 10, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string(""), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string(""), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 0, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 0, 4, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 0, 6, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 1, 2, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 1, 3, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 1, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 2, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 2, 1, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 2, 2, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 2, 3, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 2, 4, 8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 4, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 4, 1, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 4, 2, 6);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 5, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 0, 5, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 0, 9, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 0, 11, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 1, 4, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 1, 8, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 1, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 5, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 5, 1, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 5, 2, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 5, 4, 5);
  }

  void test_s_s_str_s_s_50()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 5, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 5, 6, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 9, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 9, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 9, 2, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 10, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 0, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 0, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 0, 10, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 0, 19, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 0, 20, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 0, 21, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 1, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 1, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 1, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 1, 18, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 1, 19, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 1, 20, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10, 5, 5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10, 9, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 10, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 19, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 19, 1, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 19, 2, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 20, 0, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 20, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 10, 11, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
  }

  void test_s_s_str_s_s_51()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 0, 2, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 0, 4, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 0, 5, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 0, 6, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 1, 2, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 1, 3, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 1, 4, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 1, 5, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 2, 1, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 2, 2, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 2, 3, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 2, 4, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 4, 1, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 4, 2, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 0, 5, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 0, 9, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 0, 10, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 0, 11, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 1, 4, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 1, 8, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 1, 9, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 1, 10, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 5, 1, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 5, 2, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 5, 4, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 5, 5, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 5, 6, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 9, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 9, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string(""), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string(""), 0, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 0, 2, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 0, 4, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 0, 5, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 0, 6, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 1, 2, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 1, 3, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 1, 4, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 1, 5, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 2, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 2, 1, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 2, 2, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 2, 3, 17);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 2, 4, 17);
  }

  void test_s_s_str_s_s_52()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 4, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 4, 1, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 4, 2, 15);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 5, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 0, 5, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 0, 9, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 0, 10, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 0, 11, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 1, 4, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 1, 8, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 1, 9, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 1, 10, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 5, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 5, 1, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 5, 2, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 5, 4, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 5, 5, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 5, 6, 14);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 9, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 9, 1, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 9, 2, 10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 10, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 0, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 0, 1, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 0, 10, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 0, 19, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 0, 20, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 0, 21, 19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 1, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 1, 1, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 1, 9, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 1, 18, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 1, 19, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 1, 20, 18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 10, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 10, 1, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 10, 5, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 10, 9, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 10, 10, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 10, 11, 9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 19, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 19, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 19, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 20, 0, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 20, 1, 1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 19, 2, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 9, 1, -1);
  }

  void test_s_s_str_s_s_53()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 0, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 0, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 0, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 1, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 1, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 1, 5, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 2, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 2, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 2, 3, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 2, 4, -3);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 4, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 4, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 0, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 0, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 0, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 1, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 1, 8, -8);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 1, 10, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 5, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 5, 2, -2);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 5, 4, -4);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 5, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 5, 6, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 9, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 9, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 0, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 0, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 0, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 0, 20, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 0, 21, -20);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 1, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 1, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 1, 18, -18);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 1, 19, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 1, 20, -19);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 10, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 10, 5, -5);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 10, 9, -9);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 10, 10, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 10, 11, -10);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 19, 1, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 19, 2, -1);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
  }

  void test_s_s_str_s_s_54()
  {
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 20, 1, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string(""), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string(""), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string(""), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 0, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 1, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 1, 3, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 1, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 2, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 2, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 2, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 2, 3, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 2, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 4, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 4, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 4, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcde"), 6, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 0, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 1, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 1, 8, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 1, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 5, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 5, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 5, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 5, 4, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 5, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 5, 6, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 9, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 9, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 9, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghij"), 11, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 0, 21, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 1, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 1, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 1, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 1, 18, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 1, 19, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 1, 20, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 10, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 10, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 10, 5, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 10, 9, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 10, 10, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 10, 11, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 19, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 19, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 19, 2, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 20, 0, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 20, 1, 0);
    _test_s_s_str_s_s(gl_string("abcdefghijklmnopqrst"), 21, 0, gl_string("abcdefghijklmnopqrst"), 21, 0, 0);
  }

  void test_s_s_str_s_s_55()
  {
    _test_s_s_str_s_s_npos(gl_string(""), 0, 0, gl_string(""), 0, 0);
    _test_s_s_str_s_s_npos(gl_string(""), 0, 0, gl_string("abcde"), 0, -5);
    _test_s_s_str_s_s_npos(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 0, -10);
    _test_s_s_str_s_s_npos(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 1, -9);
    _test_s_s_str_s_s_npos(gl_string("abcde"), 0, 0, gl_string("abcdefghij"), 5, -5);
  }
  
};

BOOST_FIXTURE_TEST_SUITE(_test_string_compare, test_string_compare)
BOOST_AUTO_TEST_CASE(test_string_basic) {
  test_string_compare::test_string_basic();
}
BOOST_AUTO_TEST_CASE(test_pointer_basic) {
  test_string_compare::test_pointer_basic();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr__0) {
  test_string_compare::test_size_size_ptr__0();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr__1) {
  test_string_compare::test_size_size_ptr__1();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr__2) {
  test_string_compare::test_size_size_ptr__2();
}
BOOST_AUTO_TEST_CASE(test_size_size_string0) {
  test_string_compare::test_size_size_string0();
}
BOOST_AUTO_TEST_CASE(test_size_size_string1) {
  test_string_compare::test_size_size_string1();
}
BOOST_AUTO_TEST_CASE(test_size_size_string2) {
  test_string_compare::test_size_size_string2();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size0) {
  test_string_compare::test_size_size_ptr_size0();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size1) {
  test_string_compare::test_size_size_ptr_size1();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size2) {
  test_string_compare::test_size_size_ptr_size2();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size3) {
  test_string_compare::test_size_size_ptr_size3();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size4) {
  test_string_compare::test_size_size_ptr_size4();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size5) {
  test_string_compare::test_size_size_ptr_size5();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size6) {
  test_string_compare::test_size_size_ptr_size6();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size7) {
  test_string_compare::test_size_size_ptr_size7();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size8) {
  test_string_compare::test_size_size_ptr_size8();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size9) {
  test_string_compare::test_size_size_ptr_size9();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size10) {
  test_string_compare::test_size_size_ptr_size10();
}
BOOST_AUTO_TEST_CASE(test_size_size_ptr_size11) {
  test_string_compare::test_size_size_ptr_size11();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_0) {
  test_string_compare::test_s_s_str_s_s_0();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_1) {
  test_string_compare::test_s_s_str_s_s_1();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_2) {
  test_string_compare::test_s_s_str_s_s_2();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_3) {
  test_string_compare::test_s_s_str_s_s_3();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_4) {
  test_string_compare::test_s_s_str_s_s_4();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_5) {
  test_string_compare::test_s_s_str_s_s_5();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_6) {
  test_string_compare::test_s_s_str_s_s_6();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_7) {
  test_string_compare::test_s_s_str_s_s_7();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_8) {
  test_string_compare::test_s_s_str_s_s_8();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_9) {
  test_string_compare::test_s_s_str_s_s_9();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_10) {
  test_string_compare::test_s_s_str_s_s_10();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_11) {
  test_string_compare::test_s_s_str_s_s_11();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_12) {
  test_string_compare::test_s_s_str_s_s_12();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_13) {
  test_string_compare::test_s_s_str_s_s_13();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_14) {
  test_string_compare::test_s_s_str_s_s_14();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_15) {
  test_string_compare::test_s_s_str_s_s_15();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_16) {
  test_string_compare::test_s_s_str_s_s_16();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_17) {
  test_string_compare::test_s_s_str_s_s_17();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_18) {
  test_string_compare::test_s_s_str_s_s_18();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_19) {
  test_string_compare::test_s_s_str_s_s_19();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_20) {
  test_string_compare::test_s_s_str_s_s_20();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_21) {
  test_string_compare::test_s_s_str_s_s_21();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_22) {
  test_string_compare::test_s_s_str_s_s_22();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_23) {
  test_string_compare::test_s_s_str_s_s_23();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_24) {
  test_string_compare::test_s_s_str_s_s_24();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_25) {
  test_string_compare::test_s_s_str_s_s_25();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_26) {
  test_string_compare::test_s_s_str_s_s_26();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_27) {
  test_string_compare::test_s_s_str_s_s_27();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_28) {
  test_string_compare::test_s_s_str_s_s_28();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_29) {
  test_string_compare::test_s_s_str_s_s_29();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_30) {
  test_string_compare::test_s_s_str_s_s_30();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_31) {
  test_string_compare::test_s_s_str_s_s_31();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_32) {
  test_string_compare::test_s_s_str_s_s_32();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_33) {
  test_string_compare::test_s_s_str_s_s_33();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_34) {
  test_string_compare::test_s_s_str_s_s_34();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_35) {
  test_string_compare::test_s_s_str_s_s_35();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_36) {
  test_string_compare::test_s_s_str_s_s_36();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_37) {
  test_string_compare::test_s_s_str_s_s_37();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_38) {
  test_string_compare::test_s_s_str_s_s_38();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_39) {
  test_string_compare::test_s_s_str_s_s_39();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_40) {
  test_string_compare::test_s_s_str_s_s_40();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_41) {
  test_string_compare::test_s_s_str_s_s_41();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_42) {
  test_string_compare::test_s_s_str_s_s_42();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_43) {
  test_string_compare::test_s_s_str_s_s_43();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_44) {
  test_string_compare::test_s_s_str_s_s_44();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_45) {
  test_string_compare::test_s_s_str_s_s_45();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_46) {
  test_string_compare::test_s_s_str_s_s_46();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_47) {
  test_string_compare::test_s_s_str_s_s_47();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_48) {
  test_string_compare::test_s_s_str_s_s_48();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_49) {
  test_string_compare::test_s_s_str_s_s_49();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_50) {
  test_string_compare::test_s_s_str_s_s_50();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_51) {
  test_string_compare::test_s_s_str_s_s_51();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_52) {
  test_string_compare::test_s_s_str_s_s_52();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_53) {
  test_string_compare::test_s_s_str_s_s_53();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_54) {
  test_string_compare::test_s_s_str_s_s_54();
}
BOOST_AUTO_TEST_CASE(test_s_s_str_s_s_55) {
  test_string_compare::test_s_s_str_s_s_55();
}
BOOST_AUTO_TEST_SUITE_END()
